package com.flyme.module.order.client.entity;

import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.annotation.TableName;
import com.flyme.common.core.model.base.AbstractEntity;
import com.flyme.core.base.supper.EnumConvertInterceptor;
import com.flyme.core.base.supper.entity.EntityMap;
import com.flyme.module.order.client.enums.OrderStatusEnum;
import com.flyme.module.order.client.enums.OrderTypeEnum;
import com.flyme.module.order.client.enums.PayStatusEnum;
import com.flyme.module.order.client.enums.PayTypeEnum;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 订单
 *
 * @author zyf
 * @date 2019-1-15
 */
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@TableName("odr_order")
public class Order extends AbstractEntity<Order> implements EnumConvertInterceptor {
    private static final long serialVersionUID = 1L;
    /**
     * 订单目标Id
     */
    private Long targetId;
    /**
     * 订单实体
     */
    private OrderTypeEnum orderEntity;
    /**
     * 订单标题
     */
    private String orderTitle;
    /**
     * 订单主体
     */
    private String orderBody;
    /**
     * 订单号
     */
    private String orderNo;
    /**
     * 订单封面
     */
    private String orderImage;
    /**
     * 订单金额
     */
    private BigDecimal orderAmount;

    /**
     * 退款金额
     */
    private BigDecimal returnAmount;
    /**
     * 订单状态
     */
    private OrderStatusEnum orderStatus;
    /**
     * 支付状态
     */
    private PayStatusEnum payStatus;
    /**
     * 支付方式
     */
    private PayTypeEnum payType;
    /**
     * 支付时间
     */
    private String payDate;

    /**
     * 支付时间
     */
    private String returnDate;
    /**
     * 用户Id
     */
    private Long userId;
    /**
     * 是否删除（1删除2未删除）
     */
    private Integer isDel;
    /**
     * 是否已开发票（1已开2未开）
     */
    private Integer isInvoice;
    /**
     * 商户订单号
     */
    private String outTradeNo;
    /**
     * 创建订单设备
     */
    private Integer applyType;
    /**
     * 关闭时间
     */
    private String closeDate;

    /**
     * 企业名称
     */
    private String company;

    /**
     * 联系电话
     */
    private String linkPhone;

    /**
     * 联系人名称
     */
    private String linkName;
    /**
     * 退款原因
     */

    private String reason;

    /**
     * 邀请人id
     */

    private Long inviteId;


    public static void main(String[] args) {
        String createTime = "2019-03-21 17:30:00";
        Date date = DateUtil.parse(createTime);

        long betweenDay = DateUtil.between(DateUtil.date(), date, DateUnit.MINUTE);
        System.out.println(betweenDay);
    }

    @Override
    public boolean convert(EntityMap map, String key, Object v) {
        if (key.equals("orderEntity")) {
            map.put("orderEntityText", OrderTypeEnum.getText(v));
        }
        if (key.equals("payType")) {
            map.put("payTypeText", PayTypeEnum.getText(v));
        }
        if (key.equals("payStatus")) {
            map.put("payStatusText", PayStatusEnum.getText(v));
        }
        if (key.equals("orderStatus")) {
         /*   String createTime = map.get("createTime");
            Date date = DateUtil.parse(createTime);
            String payStatus = map.get("payStatus");
            long betweenDay = DateUtil.between(DateUtil.date(), date, DateUnit.MINUTE);
            if (payStatus.equals(PayStatusEnum.NOPAY.code) && betweenDay > 15) {
                map.put("orderStatus", OrderStatusEnum.close.code);
                map.put("orderStatusName", OrderStatusEnum.close.text);
            } else {
                map.put("orderStatus", v);
                map.put("orderStatus", OrderStatusEnum.getText(v));
            }*/
            map.put("orderStatusName", OrderStatusEnum.getText(v));

        }
        return true;
    }
}
